// request.js
import axios from 'axios';

// let baseUrl = "http://localhost:9000"
let baseUrl = "http://47.119.21.188:9000"

// 创建axios实例
const service = axios.create({
    baseURL: baseUrl, // 设置统一的请求前缀
    timeout: 5000, // 设置统一的超时时长
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 在这里可以添加一些请求前的操作，比如添加Token到headers
        // config.headers['authorization'] = localStorage.getItem('token');
        return config;
    },
    error => {
        // 请求错误的统一处理
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 在这里可以添加一些响应后的操作，比如对返回数据的处理
        const res = response.data;
        // 如果返回的状态不是200，则视为错误
        const keys = Object.keys(res);
        if (keys.includes("code")) {
            res["status"] = res.code
        } else {
            res['code'] = res.status
        }
        if (keys.includes("message")) {
            res['msg'] = res.message
        }
        return res;
    },
    error => {
        const res = error.response;
        const keys = Object.keys(res);
        if (keys.includes("code")) {
            res["status"] = res.code
        } else {
            res['code'] = res.status
        }
        if (keys.includes("message")) {
            res['msg'] = res.message
        }
        return res

    }
);

// 封装get方法
function get(url, params) {
    return service({
        url,
        method: 'get',
        params,
        paramsSerializer: params => {
            // 这里可以对params进行序列化处理，例如使用qs库
            // return Qs.stringify(params, { arrayFormat: 'brackets' });
            return Object.keys(params)
                .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
                .join('&');
        }
    });
}

// 封装post方法
function post(url, data) {
    return service({
        url,
        method: 'post',
        data
    });
}

/*
 *  文件上传
 *  url:请求地址
 *  params:参数
 * */
export function fileUpload(file) {
    const formData = new FormData();
    formData.append('file', file);
    return axios.post(baseUrl +'/sys/file/upload', formData, {
        headers: {
            'Content-Type': 'multipart/form-data'
        }
    })
}

export default {
    get,
    post,
    fileUpload
};
